package com.excel.validators.core.decorative.inner;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import com.excel.validators.core.decorative.Validator;
import com.excel.validators.core.exception.InstanceException;
import com.excel.validators.excel.ErrorField;

public interface ImportEntry {

		/*
		 * 跳过excel前几行后开始解析，一般为表头
		 */
		void skipHeader(int row);
		
		/*
		 * 该excel是否存在错误（validate触发后可判断）
		 * @see validate()
		 */
		boolean hasError();
	
		/*
		 * 校验对象
		 * 定义校验对象的方式 
		 * 1）通过算定义注解 @validated 并继承 Validator，编译后可生效
		 * 2）通过手动注入
		 * @see setValidator()
		 */
		void validate();
		
		/*
		 * 手动注入检查器，需要继承 Validator
		 */
		@SuppressWarnings("rawtypes")
		void setValidator(Validator validator);
		
		/*
		 * 将excel导出成对应namespace的模型对象 （从注解或手动设置的namespace中匹配模型）
		 */
		List<Object> getModelObject() throws InstanceException ;
		
		/*
		 * 将excel导出成临时定义的输出模型
		 */
		<T> List<T> getModelObject(Class<T> modelClass) throws InstanceException ;
		
		/*
		 * 将处理后的excel写到 newfile 文件中
		 */
		void writeExcel(File newfile) throws IOException;
		
		/*
		 * 将处理后的excel写到 指定的输出流中
		 */
		void writeExcel(OutputStream output) throws IOException;

		
		/**
		 * 返回错误字段
		 * @return
		 */
		List<ErrorField> getErrorFeilds();

		/**
		 * 刷新所有导入的excel行的原始值,将重新赋值并回写给客户端
		 */
		void illegalReflectValue();
		
		/**
		 * 刷新excel的某一行原始值,将重新赋值并回写给客户端
		 */
		void illegalReflectValue(int serialNum);

}
